package com.tenthoundsqps.service;

import com.tenthoundsqps.entity.Order;

import java.util.List;

/**
 * 订单服务接口
 * 提供订单查询相关的核心业务逻辑
 * 
 * 系统优化策略：
 * 1. 多级缓存：Caffeine本地缓存 + Redis分布式缓存
 * 2. 读写分离：查询操作路由到只读数据库实例
 * 3. 冷热分离：3个月前订单归档到历史库
 * 4. ES辅助搜索：复杂查询先通过ES获取订单ID再批量查询
 * 5. 限流熔断：使用Sentinel保护系统稳定性
 */
public interface OrderService {
    
    /**
     * 根据订单ID查询订单详情
     * 查询路径：Caffeine -> Redis -> 数据库
     * 
     * @param id 订单ID
     * @return 订单信息
     */
    Order getOrderById(Long id);
    
    /**
     * 根据订单号查询订单详情
     * 
     * @param orderNo 订单编号
     * @return 订单信息
     */
    Order getOrderByNo(String orderNo);
    
    /**
     * 根据用户ID查询订单列表
     * 查询路径：Redis -> 数据库
     * 
     * @param userId 用户ID
     * @param limit 限制返回订单数量
     * @return 订单列表
     */
    List<Order> getOrdersByUserId(Long userId, int limit);
    
    /**
     * 根据手机号查询订单（使用ES搜索引擎）
     * 
     * @param phone 手机号
     * @param limit 限制返回订单数量
     * @return 订单列表
     */
    List<Order> searchOrdersByPhone(String phone, int limit);
    
    /**
     * 根据商户名称查询订单（使用ES搜索引擎）
     * 
     * @param merchantName 商户名称
     * @param limit 限制返回订单数量
     * @return 订单列表
     */
    List<Order> searchOrdersByMerchantName(String merchantName, int limit);
    
    /**
     * 获取归档订单（冷数据查询）
     * 
     * @param userId 用户ID
     * @param limit 限制返回订单数量
     * @return 归档订单列表
     */
    List<Order> getArchivedOrdersByUserId(Long userId, int limit);
}